package com.test.rm.service;

import io.seata.rm.tcc.api.BusinessActionContext;
import io.seata.rm.tcc.api.BusinessActionContextParameter;
import io.seata.rm.tcc.api.LocalTCC;
import io.seata.rm.tcc.api.TwoPhaseBusinessAction;

import java.util.Map;

/**
 * 这里定义tcc的接口
 * 一定要定义在接口上
 * 我们使用springCloud的远程调用
 * 那么这里使用LocalTCC便可
 */
@LocalTCC
public interface TccService {

    /**
     * 这里例子采用提前生成实体id然后将id放上下文
     * @return
     */
    @TwoPhaseBusinessAction(name = "TccService", commitMethod = "commit", rollbackMethod = "rollback")
    String insert(BusinessActionContext businessActionContext, @BusinessActionContextParameter(paramName = "params") Map<String, String> params);

    /**
     * 成功处理，正常不需要做什么
     */
    boolean commit(BusinessActionContext businessActionContext);

    /**
     * 失败处理，需要恢复操作前数据
     */
    boolean rollback(BusinessActionContext businessActionContext);

}
